package com.shujia.day10;


/*
    protected Object clone()

    java中并不是所有的类都可以被克隆，只有授权的类的对象才可以使用克隆方法
    我们通过阅读帮助文档后发现，若一个对象的类没有实现Cloneable接口的话，是不可以调用clone方法的
    然后，我们再去看Cloneable接口的时候，发现该接口中没有任何抽象方法，今后像这样的接口称之为标记接口

    克隆在IT行业中，称之为拷贝。
    拷贝分为两种：
        1、浅拷贝
        2、深拷贝

    面试题：Object类中的clone是浅拷贝还是深拷贝。答：是浅拷贝
 */
class Demo1 {
    int a = 10;


}

class Student3 implements Cloneable {
    String name;
    int age;
    Demo1 demo1;

    public Student3() {
    }

    public Student3(String name, int age, Demo1 demo1) {
        this.name = name;
        this.age = age;
        this.demo1 = demo1;
    }

    @Override
    public String toString() {
        return "Student3{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", demo1=" + demo1 +
                '}';
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

public class ObjectDemo4 {
    public static void main(String[] args) throws Exception {
        Demo1 d1 = new Demo1();


        Student3 s1 = new Student3("刘亦菲", 36, d1);
        System.out.println("s1: " + s1);
        System.out.println(s1.hashCode());
//        Student3 s2 = new Student3("章若楠", 21);

        System.out.println("===========================================");
        //首先，如果此对象的类不实现接口Cloneable ，则抛出CloneNotSupportedException 。
//        Object o1 = s1.clone();
        Object o1 = s1.clone();
        System.out.println("o1: " + o1);
        System.out.println(o1.hashCode());


    }
}
